package edu.spec.sms.service.impl;

import edu.spec.sms.dao.iface.*;
import edu.spec.sms.model.Clazz;
import edu.spec.sms.model.Student;
import edu.spec.sms.model.questionnaire.Questionnaire;
import edu.spec.sms.model.questionnaire.QuestionnaireClazz;
import edu.spec.sms.model.questionnaire.StudentQuestionnaire;
import edu.spec.sms.service.iface.IQuestionnaireService;
import edu.spec.sys.model.enumeration.FinishStatus;
import org.madgecko.basic.model.Pager;
import org.springframework.stereotype.Service;

import javax.inject.Inject;
import java.util.List;

/**
 * Author       : MadFrog
 * Date         : 2018/3/9 16:39
 * Description  : “问卷调查”服务层 实现
 */
@Service
public class QuestionnaireService implements IQuestionnaireService {

    @Inject
    private IQuestionnaireDao questionnaireDao;
    @Inject
    private IClazzDao clazzDao;
    @Inject
    private IQuestionnaireClazzDao questionnaireClazzDao;
    @Inject
    private IStudentDao studentDao;
    @Inject
    private IStudentQuestionnaireDao studentQuestionnaireDao;

    @Override
    public List<Questionnaire> listLatestByStudent(Integer studentId) {
        return questionnaireDao.listLatestByStudent(studentId);
    }

    @Override
    public List<Integer> listClazzIdsByquestionnaire(Integer questionnaireId) {
        return questionnaireClazzDao.listClazzIdsByquestionnaire(questionnaireId);
    }

    @Override
    public void add(Questionnaire q) {
        questionnaireDao.add(q);
    }

    @Override
    public Questionnaire load(Integer id) {
        return questionnaireDao.load(id);
    }

    @Override
    public void update(Questionnaire questionnaire) {
        questionnaireDao.update(questionnaire);
    }

    @Override
    public Pager<Questionnaire> findByCon() {
        return questionnaireDao.findByCon();
    }

    @Override
    public void addClazz(Integer questionnaireId, Integer clazzId) {
        // 构造QuestionnaireClazz
        Questionnaire q = questionnaireDao.load(questionnaireId);
        Clazz c = clazzDao.load(clazzId);
        QuestionnaireClazz qc = new QuestionnaireClazz();
        qc.setQuestionnaire(q);
        qc.setClazz(c);

        // 构造QuestionnaireClazz
        questionnaireClazzDao.add(qc);

        // 完成clazz里的学生Student和Mental的关联
        List<Student> lStu = studentDao.listStudentByClazz(clazzId);
        for(Student s : lStu){
            StudentQuestionnaire sq = new StudentQuestionnaire(s, q, FinishStatus.UNSTART, q.getCloseDate());
            studentQuestionnaireDao.add(sq);
        }
    }
}
